<?php
// smarty
require_once BASEPATH . 'lib/smarty/Smarty.class.php';

// cms includes
//TODO Datenbank schreiben und einfügen
require_once BASEPATH . 'lib/Session.class.php';
require_once BASEPATH . 'lib/Database.class.php';
require_once BASEPATH . 'lib/Globals.php';

/**
 * Die Hauptklasse des CMS.
 * Beinhaltet statische Referenzen auf h�ufig benutzte Objekte, wie etwa die Datenbank.
 *
 * @author Benjamin Kaspar
 */
class Core {

        public static $debug = true;

        private static $db = null;
        private static $session = null;

        /**
         * Liefert das Datenbankobjekt der Applikation.
         *
         * @return Database - Objekt der Datenbank-Klasse
         */
        public static function getDB() {
                if (self::$db == null) {
                        self::$db = new Database();
                }

                return self::$db;
        }

        /**
         * Liefert das Sessionobjekt des aktuellen Users.
         *
         * @return Session - Objekt der Sessionklasse
         */
        public static function getSession() {
                if (self::$session == null) {
                        self::$session = new Session();
                }

                return self::$session;
        }

        /**
         * Gibt den kompletten Inhalt einer Variable aus, n�tzlich bei Arrays oder Objekten.
         *
         * @param mixed $array
         */
        public static function dump($array) {
                echo "<pre>";
                echo var_dump($array);
                echo "</pre>";
        }

        /**
         * L�dt eine Datei/Bild/etc hoch.
         *
         * @param $_FILE/array $file - das $_FILES objekt
         * @param string $path - der Speicherpfad (vom BASEPATH ausgehend)
         */
        public static function upload($file, $path) {
                move_uploaded_file($file['tmp_name'], BASEPATH . $path);
        }

        /**
         * Leitet den User an <code>$url</code> weiter.
         *
         * @param string $url - die URL an die der User weitergeleitet werden soll.
         * @param bool $js - soll JS benutzt werden? (Wenn header/html/output bereits gesendet wurden)
         */
        public static function redirect($url, $js = false, $time = 0) {
        		sleep($time);
                if ($js) {
                        echo "<script type='text/javascript'>";
                        echo "window.location ='$url';";
                        echo "</script>";
                } else {
                        header("Location: $url");
                }

                exit;
        }

        /**
         * Gibt eine Fehlermeldung mit Stacktrace aus.
         *
         * @param string $msg - die Fehlermeldung
         * @param boolean $die - ob das Programm beendet werden soll
         */
        public static function error($msg, $die = false) {
                echo "<div style='border:2px solid red; padding:5px; margin:5px; font-weight:bold;'>";
                echo "Fehlermeldung: &quot;" . $msg . "&quot; ";
                echo "(" . date("d.m.y - H:i:s \\U\\h\\r", time()) . ")";
                echo "<br/><span style='font-size: 10px; font-weight: normal;'><pre>";
                echo self::$debug ? debug_print_backtrace() : "";
                echo "</pre></span></div>";
                if ($die) {
                        die;
                }
        }

}
?>
